// 1. 左值小于中值，中值小于右值：没有旋转，最小值在左边，可以收缩右边界
// 2. 左值大于中值，中值小于右值：有旋转，最小值在左半边，可以收缩右边界 54123
// 3. 左值小于中值，中值大于右值：有旋转，最小值在右半边，可以收缩左边界 34512
// 4. 左值大于中值，中值大于右值：单调递减，不可能出现

var findMin = function (nums) {
  let left = 0;
  let right = nums.length - 1;
  while (left < right) {
    let mid = (left + right) >> 1;
    if (nums[mid] > nums[right]) {
      left = mid + 1;
    } else {
      right = mid;
    }
  }
  return nums[left];
}

var findMin = function (nums) {
  let left = 0,
    right = nums.length - 1;
  while (left < right) {
    let mid = (left + right) >> 1;
    if (nums[mid] > nums[right]) {
      left = mid + 1;
    } else if (nums[mid] < nums[right]) {
      right = mid;
    } else {
      right--;
    }
  }
  return nums[left];
}